import java.util.Scanner;

public class Main {
    public static void main1(String[] args) {
        /**
         * 问题：
         *  数据可能会溢出，需要使用long*/
        Scanner in = new Scanner(System.in);
        // 1 接收元素数量、查询次数
        int n = in.nextInt();
        int m = in.nextInt();
        // 2 接收初始数组
        int[] arr = new int[n];
        for(int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        // 3 接收查询指令数组
        int[][] order = new int[m][2];
        for(int i = 0; i < m; i++) {
            order[i][0] = in.nextInt();
            order[i][1] = in.nextInt();
        }
//        System.out.println(n + " " + m);
//        for(int x: arr) {
//            System.out.print(x + " ");
//        }
//        System.out.println();
//        for(int[] x: order) {
//            System.out.print(x[0] + " ");
//            System.out.print(x[1] + "\n");
//        }
        // 4 准备前缀和（因为每次都要查询l到r区间，故我们可以先算出区间和）
        // -注意：由于元素相加减可能会溢出int的最大边界，因此此处使用long进行存储
        long[] dp = new long[n];
        dp[0] = arr[0];
        for(int i = 1; i < n; i++) {
            dp[i] = dp[i-1] + arr[i];
        }
        // 5 计算
        for(int i = 0; i < m; i++) {
            // -注意：指令下标从1开始计数
            int left = order[i][0] - 1;
            int right = order[i][1] - 1;
            if(left == 0) {
                System.out.println(dp[right]);
            } else {
                System.out.println(dp[right] - dp[left - 1]);
            }
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 1 接收n,m,q
        int n = in.nextInt();
        int m = in.nextInt();
        int q = in.nextInt();
        // 2 接收矩阵元素
        int[][] arr = new int[n+1][m+1];
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                arr[i][j] = in.nextInt();
            }
        }
        // 3 接收指令
        int[][] order = new int[q][4];
        for(int i = 0; i < q; i++) {
            for(int j = 0; j < 4; j++) {
                order[i][j] = in.nextInt();
            }
        }
        // 4 前缀和
        // -注意溢出问题
        long[][] dp = new long[n+1][m+1];
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                dp[i][j] = dp[i][j-1] + dp[i-1][j] - dp[i-1][j-1] + arr[i][j];
            }
        }
//        // -检查输入与前缀和是否正确
//        System.out.println("元素");
//        for(int[] x: arr) {
//            for(int e: x) {
//                System.out.print(e + " ");
//            }
//            System.out.println();
//        }
//        System.out.println("前缀和");
//        for(int[] x: dp) {
//            for(int e: x) {
//                System.out.print(e + " ");
//            }
//            System.out.println();
//        }
        // 5 执行查询结果
        for(int i = 0; i < q; i++) {
            int x1 = order[i][0];
            int y1 = order[i][1];
            int x2 = order[i][2];
            int y2 = order[i][3];
            // -注意溢出问题
            long temp = dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1];
            System.out.println(temp);
        }
    }
}